perm filename ARM.NEW[UP,DOC] blob sn#070174 filedate 1973-11-05 generic text, type T, neo UTF8
00100	GENERAL
00200	The arm has six degrees of freedom corresponding  to  6  joints.  The
00300	joints  are  numbered from 1 to 6 starting at the shoulder and moving
00400	out to the hand. All rotary joint angles  are  measured  in  degrees.
00500	Joint 3 which is linear is measured in inches.
00600	
00700	The  coordinate  system is referenced to the table top with the table
00800	lying in the x y plane at z=0 with the z axis pointing vertically up.
00900	The  origin  is at the corner of the table. The base of the arm is at
01000	20,10 approximately.
01100	
01200	The Arm is normally controlled by  specifying  what  happens  to  the
01300	hand. The program checks that the hand will not intersect the table.
01400	
01500	On  the  finger  tips  are  two touch sensors which can interrupt arm
01600	operation.
01700	
01800	The  program  which runs the arm is in the form of an interpreter and
01900	works in two basic modes: Planning and  Execution.  In  the  planning
02000	mode  arm  functions are assembled into a data file which may then be
02100	executed by a "DO" command. Functions may be immediately executed  by
02200	prefixing the function call by "DO". For example.
02300	
02400		OPEN 3
02500		PARK
02600		DO
02700	
02800	will  cause  a  data  file to be constructed, either on the 3330 as a
02900	file WAVE.TRJ or on the Swapping disk, containing the  two  functions
03000	open  the  hand to 3 inches and then move to the park position. These
03100	two commands are then executed by the DO.
03200	
03300		DO OPEN 3
03400		DO PARK
03500	
03600	This will have the same effect except that the planning program  will
03700	be   activated  between  each  function  call,  which  is  very  time
03800	consumming.
03900	
04000	It is possible to write symbolic  programs  either  in  the  form  of
04100	macros  using  the "DEFINE" pseudo op, or by creating a text file and
04200	reading it in by a "REQUIRE" pseudo op.
04300	
04400	What follows is a list of the Functions, Errors and how  to  run  the
04500	arm.
04600	
04700	
     

00100	DO <function> | DO <program> | DO
00200	If DO is followed by a function then that function will be  executed.
00300	This  does  not  change  the  state  of  any  program being compiled.
00400	Otherwise the <id> following the DO is taken as the program name.  If
00500	DO  is  terminated  by a C/R then the default program is executed. If
00600	this does not exist the servo will return  an  error  status  3.  The
00700	default  program  name  is  that  last set by FILE this is changed by
00800	DOing another program, in which case its  program  name  becomes  the
00900	default, or by a BEGIN pseudo op.
01000	
01100	REQUIRE <file spec>
01200	This causes the input scanner to read from the designated file.  When
01300	an  EOF  is encountered scan returns to the TTY. <file spec>::= <file
01400	name>.<ext>[pppn] where if <ext> is null then  HAL  is  used  and  if
01500	[pppn] is missing the running pppn is assumed.
01600	
01700	DUMP <file spec>
01800	This causes a file to be  opened  and  all  transforms,  vectors  and
01900	macros  are  written  out  in  symbolic  form.  It is the opposite to
02000	REQUIRE.  If  a  file  already  exists,  of  the  same  name,  it  is
02100	over-written!!!
02200	
02300	TRANS <id>
02400	<X> <Y> <Z> <O> <A> <T>
02500	This pseudo op is  on  two  lines  and  is  used  to  set  up  a  4x4
02600	transformation  and  to identify it with an <id>. The <X> <Y> and <Z>
02700	specify the position of a point centrally located between the  finger
02800	tips in table coordinates. <O> <A> and <T> specify the orientation of
02900	the hand. with all three angles (in degrees) zero the hand points  in
03000	the  negative  "y"  direction with the fingers in a horizontal plane.
03100	the orientation vector which points from one finger tip to the  other
03200	is  aligned  along  the  "x"  axis.  <O>  specifies a rotation of the
03300	orientation vector about a vertical direction; thus at <O>=90 degrees
03400	the  hand  still  horizontal  would  point  along  the  positive  "x"
03500	direction. <A> is a  rotation  about  the  orientation  vector.  With
03600	<A>=90  degrees  the hand always points straight down. <T> is a final
03700	rotation about the axis of the wrist and corresponds to a rotation of
03800	the  final  joint.  When talking to the interpreter directly from the
03900	TTY only as many parameters that have changed  need  to  be  retyped.
04000	Further  a  delimiter  (which  includes  a  space) indicates that the
04100	parameter is to remain unchanged.  For  example  to  change  the  <Z>
04200	parameter only one types
04300	TRANS <id>
04400	<space><space><Z>C/R.
04500	
04600	VECT <id>
04700	<X> <Y> <Z>
04800	This is similar to TRANS except that it sets up  vectors.  There  are
04900	four predeclared vectors X,Y,Z,and NIL the null vector.
05000	
05100	BEGIN <id>
05200	This pseudo op starts a program of name <id>. If this  pseudo  op  is
05300	not  given before any instruction then a default BEGIN <default name>
05400	is automatically generated.
05500	
05600	END
05700	This closes the trajectory file. If a  program  has  not  been  ENDed
05800	before a DO <program> is executed an automatic END is performed.
05900	
06000	WAIT
06100	Causes  the  arm to stop at the corresponding point during execution.
06200	Execution may be resumed (after executing any number of functions) by
06300	a proceed command.
06400	
06500	P <integer>
06600	this causes the arm to proceed from a wait or an error state, if  the
06700	argument  is  non  zero  execution  proceeds with the last or current
06800	instruction, otherwise from the next instruction.
06900	
07000	FILE <id>
07100	This  changes  the  default file name to <id>. It is initially set at
07200	WAVE.
07300	
07400	WHERE
07500	This  causes  the  arm's  position  to be read and the position to be
07600	typed out. This function is automatically executed when  the  program
07700	is  started.  It  should  only  be executed if the arm has been moved
07800	manually.
07900	
08100	HERE <trans> | HERE <trans> <dx> <fac> <axis> <deg>
08200	This is like TRANS except that the hands position is read as in WHERE
08300	to  give the initial position for the transform <id>. Its main use is
08400	in defining  positions  by  moving  the  hand  and  then  creating  a
08500	transform  to  represent the present position. In the second form the
08600	the value of the transform is such that when the vector  <dx>  scaled
08700	by  <fac>  is  added  to it and the transform is rotated about <axis>
08800	<deg> degrees the current hand position is obtained.
08900	
     

00100	PARK
00200	Generates  a  trajectory to the PARK position, which has joint angles
00300	-180, -90, 14, -90, 90, 0
00400	
00500	GOTO <trans> | GOTO <trans> <dx> <fac> <axis> <deg>
00600	Generates  a three part trajectory to either <trans> or in the second
00700	case to <trans> rotated about a  vector  <axis>,  <deg>  degrees  and
00800	translated an additional vector <dx> scaled by <fac>.
01800	
01810	GO <trans> | GO <trans> <dx> <fac> <axis> <deg>
01832	This  is  the  same  as  GOTO except that it is a one part direct  move
01854	with no lift off or set down.
01876	
01900	MOVE <trans> | MOVE <trans> <dx> <fac> <axis> <deg>
02000	This  is  the  same  as  GOTO except that a smooth trajectory is fitted
02100	through the three positions.
02200	
02300	DRAW <pos> <rot> <angle> <crank> <axis> <deg> <time> <loop>
02400	This  is  a  controlled  motion of the hand. The hand is moved to its
02500	present position plus the vector <pos>.  As  it  moves  the  hand  is
02600	rotated about a vector <rot>, <angle> degrees. If <crank> is not null
02700	then the hand is assumed to be attached  to  a  crank  which  is  the
02800	initial  position  +  <crank> and as the first motion is executed the
02900	hand attached to the end of the crank is rotated about an axis <axis>
03000	<deg>  degrees.  If  loop  is  non  zero  and  the  initial and final
03100	positions are the same the loop motion may be  repeated  continuously
03200	<loop> times. The entire motion takes <time> jiffies. A jiffy is 1/60
03300	th. second.
03400	
03500	CHANGE <dx> <fac> <rot> <deg> <time>
03600	This  causes a differential motion of vector <dx> scaled by <fac> and
03700	simultaneously the hand rotated about a vector <rot>, <deg>  degrees.
03800	If <time> > 0 then the motion shall take <time> jiffies.
03900	
04000	DRIVE <joint> <dist> <time>
04100	This causes joint <joint>(1 is the root joint -- 6 is the hand) to be
04200	driven  <dist>  degrees,  or  in  the case of joint 3 ---inches, in a
04300	minimum time <time>. All other joints brakes remain  on  unless  free
04400	joints are also specified.
04500	
04600	PLACE
04700	This causes the hand to move down until it meets some resistance.
     

00100	OPEN <dist>
00200	This causes the hand to be opened or closed until the opening between
00300	the  fingers is <dist>, it gives up after about 4 seconds and returns
00400	error 22 if it is unable to comply.
00500	
00600	CLOSE <dist>
00700	This  always  closes the hand until it meets some resistance. It then
00800	checks that the opening of the hand is greater than <dist>. If it  is
00900	less  it returns error 2. This is useful in checking that the hand is
01000	holding something.
01100	
01200	CENTER <dist>
01300	This  is  the  same  as CLOSE except that the hand is driven to close
01400	centrally over the object using touch.
01500	
01600	SCREW <vel>
01700	This instruction will drive the tool at velocity <vel> (maximum =63).
01800	It must be MERGEd with some arm motion.
01900	i.e.
02000		SCREW 27
02100		MERGE
02200		CHANGE REACH 1 NIL 0 100
02300	While  the  hand reaches one inch the tool will drive at velocity 27.
02400	Normally FREE joints would  also  be  specified  together  with  some
02500	STOPping  constraint.  Note  NIL,  of  zero  value, is the only other
02600	predeclared vector.
02700	
     

00100	FREE <n> <f1> ... <fn>
00200	For  each  of  the  <n>  direction vectors <fn> joints of the arm are
00300	freed  during  the  next  arm  motion.  These  joints  have   gravity
00400	compensation,  additional forces and acceleration compensation but no
00500	position sensitive feedback. The vectors <fn> specify  directions  in
00600	table coordinates.
00700	
00800	For example.
00900	
01400		FREE 2 X Y
01500		CHANGE Z -1 NIL 0 100
01600	
01700	Would provide for free motion in the x and y direction while the hand
01800	moves down 1 inch for the next 100 jiffies.
01900	
02000	SPIN <n> <f1> ... <fn>
02100	For each of the <n> axis vectors <fn> joints of the arm are freed  as
02200	in FREE.
02300	
02400	FORCE <fv> <mv>
02500	During the next arm motion additional predicted joint torques will be
02600	applied such as to exert a force <fv> and moment <mv> at the hand.
02700	
02800	For example.
02900	
03200		FREE 1 Z
03300		VECT F
03400		0 0 -50
03500		FORCE F NIL
03600		CHANGE NIL 0 NIL 0 100
03700	
03800	This would provide for a direction of free motion in the z  direction
03900	while  exerting  a  force of 50 oz. straight down. i.e. the hand will
04000	push down at 50 oz foe the next 100 jiffies.
04100	
04200	STOP <fv> <mv>
04300	If during the next arm motion the force and moment at the hand exceed
04400	<fv>  and  <mv>  the  arm  will stop. If such a condition is not meet
04500	during the motion an error 23 will be returned.
04600	
04700	WOBBLE <deg>
04800	This  causes  the outer three joints to be modulated with a sine wave
04900	of amplitude <deg> degrees.
05000	
05100	NNUL
05200	At  the  end  of the next motion do not wait to null out joint errors
05300	but stop the arm immediately.
05400	
05500	
05600	
05700	
     

00100	CONO <arrive> <depart> <k> <ts> <tm> <weight>
00200	This  function  executed immediately before any motion instruction is
00300	used to modify the performance of that motion. All motions  start  at
00400	an  initial  position  move to a position given by initial + <depart>
00500	where <depart> is a vector which is always restored  to  0,0,3  after
00600	each  motion  instruction.  The arm then moves to a position given by
00700	final + <arrive> where arrive is similar to <depart>, and then to the
00800	final  position.  In  the  case  of  PARK <arrive> is set to null.  A
00900	vector <k> is used to specify the radii of  gyration  of  the  object
01000	held  in  the  hand.  the x axis is along the direction normal to the
01100	plane of the fingers. the y direction is along the direction  of  the
01200	orientation  vector (between the finger tips). and the z direction is
01300	along the fingers. The weight of the object is given in  <weight>  in
01400	ounces.  <ts>  is  the  minimum time in jiffies (1/60 second) for the
01500	initial and final parts of the trajectory, and <tm>  is  the  minimum
01600	time  for  the  mid  part.  non  zero times are used to slow down arm
01700	motions.
01800	
01900	MERGE
02000	This  function  if  executed  before  a motion instruction causes the
02100	instruction before the motion instruction to  be  executed  with  the
02200	motion.  This  is  only useful with OPEN if it is desired to open the
02300	hand as it moves off.
02400	i.e
02500		OPEN 3
02600		MERGE
02700		MOVE T
02800	will cause the hand to start opening as the arm starts to move.
02900	
03000	TOUCH <mask>
03100	This causes the arm to stop during the next instruction if any of the
03200	masked touch sensors in <mask> are activated.
03300	i.e.
03400		TOUCH 3
03500		OPEN 0
03600	will  cause  the  hand  to  close  until  it touches something. If it
03700	touches anything an error <mask>&6 is returned where <mask> are those
03800	sensors which have been activated.
03900	
     

00100	SAVE <id>
00200	The current deviation in x,y and z from the set  point  is  saved  in
00300	cell <id>. for example if the hand were move to a position T and then
00400	CENTERed the deviation of position of the  hand  from  T,  after  the
00500	centering operation can be saved in <id>
00600	i.e.
00700		MOVE T
00800		CENTER 1
00900		SAVE C1
01000	Note that this does not save any change in hand orientation.
01100	
01200	SET <id> <vect>
01300	This will preload cell  <id>  with  the  deviation  x,y,z  in  vector
01400	<vect>.
01500	
01600	RESTORE <id> <int>
01700	This instruction must be executed immediately  after  a  MOVE  or  GO
01800	instruction and will cause the hand to move to the position specified
01900	plus the deviation. SAVEd in cell <id>. If <int> is non zero the cell
02000	will be freed for further use.
02100	i.e.
02200		MOVE T
02300		RESTORE C1 1
02400	will cause the hand to move to T plus the vector SAVEd in C1. It will
02500	also free up C1 for further use.
02600	
     

00100	JUMP <label>
00200	All instructions may be labelled by a label followed by a colon,  and
00300	the JUMP instruction will cause control to jump to that instruction.
00400	i.e.
00500	L1:	MOVE T
00600		PARK
00700		JUMP L1
00800	will cause an infinite loop.
00900	
01000	SKIPE <error>
01100	If error <error> occurs during execution on the previous  instruction
01200	then the following instruction is skipped.
01300	i.e.
01400	L1:	OPEN 3
01500		CHANGE REACH 1 NIL 0 0
01600		CLOSE 1
01700		SKIPE 2
01800		JUMP L2
01900		JUMP L1
02000	L2:
02100	will  cause  the hand to advance by inches snapping its jaws until it
02200	finds something wider than 1 inch.
02300	
02400	SKIPN <error>
02500	The same as SKIPE except that it skips only  if  the  error  did  not
02600	occur. Which makes the last example cleaner.
02700	L1:	OPEN 3
02800		CHANGE REACH 1 NIL 0 0
02900		CLOSE 1
03000		SKIPN 2
03100		JUMP L1
03200	
03300	SKIPS <error>
03400	This is like SKIPE in that the right octal digit of  the  error  must
03500	match  exactly  but it also requires that the logical AND of the high
03600	order digits with <error> is true. This is mostly used in touch work.
03700	For  example if either error 46 or error 16 would indicate some state
03800	then a SKIPS 56 would detect it.
03900	
04000	AOJ <label>
04100	This  is  the  same  as JUMP except that it will perform a spiral box
04200	search as follows. A SEARCH command must have first been executed  to
04300	calculate the differential joint angle changes to make an x deviation
04400	and a y deviation at the place that the search must be executed. Then
04500	every  time  the  AOJ  instruction  is  executed  it first performs a
04600	RESTORE of appropriate magnitude to  generate  the  spiral  and  then
04700	performs the JUMP.
04800	i.e.
04900		MOVE T
05000		SEARCH 1
05100	L1:	MOVE T
05200		AOJ L1
05300	Will cause a spiral search in one inch steps. The first move to T  is
05400	important as the context for the SEARCH must be established.
05500	
05600	SEARCH <step>
05700	Computes the change in joint angles to conduct a search, in  the  x,y
05800	plane,  where  the  arm  is currently planned to be and zeros the AOJ
05900	counters.
06000	
06100	FLUSH
06200	Due  to  the  partial paging scheme used by the arm, Jumps must occur
06300	within pages This instruction will cause a new page  to  be  started.
06400	This will soon go away.
06500	
     

00100	LINK <n>
00200	Will cause the transformation of link <n> ( 3 ≤ n  ≤6)  to  be  typed
00300	out.
00400	
00500	GRASP
00600	Causes the current hand opening to be typed out.
00700	
00800	WEIGHT
00900	Causes the uncompensated weight that  the  hand  is  believed  to  be
01000	holding, based on error torques, to be typed out.
01100	
01200	I
01300	Causes the joint angles to be typed out.
     

00100	DEFINE <macro name> <par>
00200	<body>
00300	This defines a macro of name <macro name> and formal parameters given
00400	by  <par>  a list of identifiers. The body then follows,line by line.
00500	The macro is terminated by a blank line. macros  may  be  nested.  An
00600	example
00700	DEFINE GRAB MIN
00800	MOVE T
00900	CLOSE MIN
01000	
01100	If the macro call appears then the expanded code will be assembled.
01200		GRAB 2
01300	will assemble as
01400		MOVE T
01500		CLOSE 2
01600	These macros are written out by the DUMP command and are read  in  by
01700	the REQUIRE command.
01800	
01900	ED <macro name>
02000	This is a rudementary editor. The <macro  name>  must  be  given  the
02100	first  time  but  need  not be gived again if the same macro is to be
02200	re-edited. The macro definition is then presented line by line  every
02300	time a C/R is typed. Previous lines may be retrieved by typing ALT.
02400		A "D" will delete the current line
02500		An "I" will insert a line after the present line, to be typed
02600		in.
02700		An "R" will replace the current line with one to be typed in.
02800		A "T" will cause the next line to be typed.
02900	All these commands may be preceded by an unsigned integer which  will
03000	do  n  of  them.  For  example  5D will delete the current and next 4
03100	lines. When you have finished editing the macro  type  "E"  then  the
03200	macro  will  be read in again and redefined. (assuming that the first
03300	line which has the DEFINE is not deleted. This by the way is  a  good
03400	way  to  modify  existing  macros  if the macro name is changed a new
03500	macro will be defined. One additional feature  is  "F"  followed  SOS
03600	manner  by  a  string.  It will then do a series of C/Rs until a line
03700	with a matching string is found.
     

00100	This  is  a  programming  example.  We have the situation of the hand
00200	holding the screw driver which has a screw on its  end.  We  want  to
00300	insert the screw into a hole and to screw it all the way in.
00400		DEFINE	SCRW	H A		;The macro to screw the screw
00500						;into hole H using approach A
00600		VECT SA				;The  departure  vector  from
00700						;the screw dispenser
00800		0 -1 2
00900		VECT SCK			;The radii of gyration of the
01000						;screw driver
01100		.5 1.0 1.0
01200		CONO A SA SCK 10 40 50		;Set  up  the  conditions for
01300						;the move
01400		FIND H H 1			;A   nested   macro  call  to
01500						;perform the search
01600		VECT FV				;The  force to verify that it
01700						;is in the hole
01800		0 0 -60
01900		STOP FV NIL			;Stop during the next motion
02000		CHANGE REACH .7 NIL 0 0		;If the arm goes .7 inch then
02100						;we are not
02200						;in the hole and the arm will
02300						;stop with error 23
02400		FREE 3 X Y Z			;X, Y and Z  are  vectors  in
02500						;the x, y and  z  directions.
02600						;This   will    specify    of
02700						;freedom.
02800		VECT FV				;We will wnat  to  push  down
02900						;with this force
03000		0 0 -60
03100		FORCE FV NIL			;Push with force FV
03200		VECT MV				;This is the stopping moment
03300		0 0 -100
03400		STOP NIL MV			;Stop when we meet it.
03500		SCREW 60			;Drive  the  screw  driver at
03600						;this velocity
03700		MERGE				;while
03800		CHANGE NIL 0 NIL 0 100		;we  go nowhere while pushing
03900						;down,    with   three   free
04000						;joints,    monitoring    the
04100						;torque.
04200	L1:	FREE 2 X Y			;The  screw  is now in and we
04300						;must  pull  the screw driver
04400						;out. We want two
04500		WOBBLE .2			;Shake things around a bit
04600		CHANGE REACH -.2 NIL 0 0	;while we go up 0.2 inches
04700		VECT FV				;Set up a force
04800		0 0 100
04900		STOP FV NIL			;and  stop  if it is exceeded
05000						;during   the   next  motion,
05100						;indicating that  the  driver
05200						;is jammed in the screw.
05300		NNUL				;dont null errors
05400		CHANGE Z 1 NIL 0 50		;and try to go up an inch.
05500		SKIPE 23			;this means that the stopping
05600						;force of 100 oz was not meet
05700						;and all is O.K.
05800		JUMP L1				;if not try again
05900		CONO SA A SCK 10 0 0		;Set up the return conditions
06000		GO SC				;and go back to the dispenser
     

00100		DEFINE	FIND	T D F		;This macro is used to search
00200						;for  the hole The hole is at
00300						;Trans T offset by a vector D
00400						;scaled by F
00500		NNUL				;dont null the first time
00600		GO T D F NIL 0			;Go to the hole position
00700		VECT FV				;Maximum  resistance that the
00800						;screw will meet
00900		0 0 -50
01000		SEARCH .07			;Set  up  for a search of 0.7
01100						;in   steps.  Note  that  the
01200						;context  for  the search has
01300						;been   established   by  the
01400						;previous GO.
01500		CONO NIL NIL SCK 10 0 0		;No  arrive  or  depart, move
01600						;directly
01700	L1:	GO T D F NIL 0			;The search move
01800		STOP FV NIL			;Try to go down
01900		NNUL				;without nulling
02000		CHANGE REACH .6 NIL 0 60	;by 0.6 inches
02100		SKIPE 23			;if  we  meet resistance then
02200						;not in hole
02300		AOJ L1				;spiral and try again
02400	
     

00100	ERRORS
00200	This is a list of the error messages you might get when running the arm.
00300	When running wave the error message corresponding to the error is typed.
00400	
00500		1	Arithmetic Overflow occured. Something bad has happened.
00600		<n>1	Excessive force occured at joint <n>
00700		2	Hand closed more than minimum specified in CLOSE function
00800		3	File not found
00900		4	Someone has pawned the DSK
01000		5	Someone has sold the DSK
01100		<mask>6	Touch sensors <mask> have touched something
01200		7	Cannot read the joint positions, usually hardware trouble.
01300		20	Function took too long to execute
01400		22	Hand function took too long to execute.
01500		23	Arm failed to reach force limit set by STOP during motion.
01600		24	Arm in L1: JUMP L1 type loop.
01700		25	Save array number out of bound
01800		27	The function you have called is disconnected.
01900		30	The arm is down
02000		50	Librascope read error
02100		60	You have a very old program which does not match the current servo
02200		70	The reference supply used by the arm is off.
02300		100	The PDP6 is not running.
02400		200	The servo program has been interrupted.
02500	
02600	
     

00100	RUNNING THE ARM
00200	Power  to the arm is controlled by a switch on a box with two lights.
00300	The box is located on the rack under the table near the base  of  the
00400	arm.  The  yellow light indicated that the power supply is on and the
00500	red light indicated that the arm is also on.
00600	
00700	There is also a grey box on the end of a cable with some switches and
00800	a  →→→"RED  BUTTON"←←← on it. The buttons are brake releases. The one
00900	furthest from the →→→"RED BUTTON"←←← is joint 1. There  is  no  brake
01000	release  for  joint  6, sorry about that. The last switch is the hand
01100	brake release. All brakes should be turned on when the arm  is  being
01200	run.
01300	
01400	Now  for  the →→→"RED BUTTON"←←←. If the →→→"RED BUTTON"←←← is pushed
01500	while the arm is running the arm will stop and  all  brakes  will  be
01600	applied.  You  should always be holding the box with your finger over
01700	the →→→"RED BUTTON"←←← when running the arm. For  damaging  the  hand
01800	...  -6  acamedic  credits.  For  damaging  the  arm ... -12 acamedic
01900	credits.
02000	
02100	There is also a bell that starts 1 second before the arm does in  the
02200	case  of  a  DO  and starts with the arm in the case of a P. The bell
02300	goes "ting, ting, ting," just like a truck  backing-up,  except  that
02400	someone stole the bell, oh well!
02500	
02600	RUNNING THE PROGRAM
02700	The program is on 1,3 and is run by typing
02800	R WAVE
02900	This program will in turn log in a servo program as a  PTY  job,  and
03000	will  run  a  job  called [ARM]. When this job is running you will be
03100	asked if you want your files saved. If you respond  Y  then  the  arm
03200	programs  will be written out on the 3330 with .TRJ extensions. These
03300	files may be executed at a later time by simply saying DO followed by
03400	the  file  name(with  no  extension).  If you do not ask to have your
03500	files saved fast bands will be used  which  although  fast  will  all
03600	disappear when you kill your job.
03700	
03800	Wave will then announce that it is ready and you can type anything on
03900	the previous pages.  It will respond  with  O.K.  when  it  has  been
04000	supplied  all  the  parameters  for the function you are defining. It
04100	will then respond with  an  *  when  ready  for  the  next  function.
04200	Sometimes in execution the servo program will cause trouble. If it is
04300	in the run queue but not in spacewar mode then someone  has  the  A/D
04400	assigned If it is in the stop queue then you will have to ↑c wave and
04500	restart, which will lose all your macros and  data  unless  you  have
04600	dumped it.
04700